<?php
session_start();
class CartTool {  
  
    private static $ins = null;  
    private $items = array();  
      
  
  
    final protected function __construct() {  
          
    }  
  
    final protected function __clone() {  
          
    }  
  
  
    //单例方法 获取实例  
    protected static function getIns() {  
        if (!(self::$ins instanceof self)) {  
            self::$ins = new self();  
        }  
        return self::$ins;  
    }  
  
    //把购物车的单例对象放在session里   
  
    public static function getCart() {  
        //如果cart在session不存在，并且 也不是当前自身类的实例，  
        //说明session里没有购物车  
        if(!isset($_SESSION['cart']) || !($_SESSION['cart'] instanceof self)) {  
            $_SESSION['cart'] = self::getIns();  
        }  
        return $_SESSION['cart'];  
    }   
  
    /* 
    添加商品 
    param int $id 商品主键 
          string $name 商品名称 
          float $price 商品价格 
          int $num 购物数量 
    */  
    public  function addItem($id,$name,$price,$num=1) {  
        if ($this->hasItem($id)) { //如果该商品已存在则直接加其数量  
            $this->incNum($id,$num);  
            return;  
        }  
  
        $item = array();  
        //二维数组  
        $item['name'] = $name;  
        $item['price'] = $price;  
        $item['num'] = $num;  
  
        $this->items[$id] = $item;  
    }  
  
    /* 
    修改购物车中的商品数量 
    int $id 商品主键 
    int $num 某商品修改后的数量，即直接把某商品 
    的数量改为$num 
    */  
    public function modNum($id,$num=1) {  
        if (!$this->hasItem($id)) {  
            return false;  
        }  
        $this->items[$id]['num'] = $num;  
    }  
  
    /* 
    商品数量+1 
    */  
    public function incNum($id,$num=1) {  
        if ($this->hasItem($id)) {  
            $this->items[$id]['num'] += $num;  
        }  
    }  
  
    /* 
    商品数量+1 
    */  
    public function decNum($id,$num=1) {  
        if ($this->hasItem($id)) {  
            $this->items[$id]['num'] -= $num;  
        }  
  
        //如果减少后，数量为0，则把这个商品删掉  
        if ($this->items[$id]['num'] <1) {  
            $this->delItem($id);  
        }  
    }  
  
  
    /* 
    判断商品是否存在 
    */  
  
    public function hasItem($id) {  
        return array_key_exists($id,$this->items);  
    }  
  
    /* 
    删除商品 
    */  
    public function delItem($id) {  
        unset($this->items[$id]);  
    }  
  
    /* 
    查询购物车中商品的种类 
    */  
    public function getCnt() {  
        return count($this->items);  
    }  
    /* 
    查询购物车中商品的个数 
    */  
    public function getNum(){  
        if ($this->getCnt() == 0) {  
            //种数为0，个数也为0  
            return 0;  
        }  
  
        $sum = 0;  
        foreach ($this->items as $item) {  
            $sum += $item['num'];  
        }  
        return $sum;  
    }  
  
    /* 
    购物车中商品的总金额 
    */  
    public function getPrice() {  
        //数量为0，价钱为0  
        if ($this->getCnt() == 0) {  
            return 0;  
        }  
  
        $price = 0.0;  
        foreach ($this->items as $item) {  
            $price += $item['num'] * $item['price'];  
        }  
        return $price;  
    }  
  
    /* 
    返回购物车中的所有商品 
    */  
    public function all() {  
        return $this->items;  
    }  
  
  
    /* 
    清空购物车 
    */  
    public function clear() {  
        $this->items = array();  
    }  
  
}  
$cart=CartTool::getCart();

if(isset($_GET['insert'])){
	$cart->addItem(1,'手机','1999',1);  
}
if(isset($_GET['mycart'])){
	var_dump($cart->all());
}
?>